// 过河问题
// 一共n人出游，他们走到一条河的西岸，想要过河到东岸
// 每个人都有一个渡河时间ti，西岸有一条船，一次最多乘坐两人
// 如果船上有一个人，划到对岸的时间，等于这个人的渡河时间
// 如果船上有两个人，划到对岸的时间，等于两个人的渡河时间的最大值
// 返回最少要花费多少时间，才能使所有人都过河
// 测试链接 : https://www.luogu.com.cn/problem/P1809
// 提交以下的code，可以直接通过

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 100001;
int nums[MAXN];
int dp[MAXN];
int n;

inline int read()
{
    char ch = getchar();
    int x = 0, f = 1;
    while(ch < '0' || ch > '9')
    {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = 10 * x + ch - '0';
        ch = getchar();
    }
    return f * x;
}

int minCost()
{
    sort(nums, nums + n);
    if(n >= 1) dp[0] = nums[0];
    if(n >= 2) dp[1] = nums[1];
    if(n >= 3) dp[2] = nums[0] + nums[1] + nums[2];
    for(int i = 3; i < n; ++i)
    {
        // dp[i] : 将 0 ~ i 的人都送到东岸花费最少的时间
        dp[i] = min(
            // [0, i] 一起过去，然后 0 将船带回来
            dp[i - 1] + nums[i] + nums[0], 
            // [0, 1] 过去，1 将船带回来, [i - 1, i] 过去，然后 0 把船带回来
            dp[i - 2] + nums[1] + nums[1] + nums[0] + nums[i]);
    }
    return dp[n - 1];
}

int main()
{
    n = read();
    for(int i = 0; i < n; ++i) nums[i] = read();
    printf("%d\n", minCost());

    return 0;
}